package cuongnh.project.japanesediary.vocabulary.ui.action;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;

import cuongnh.project.japanesediary.vocabulary.model.Vocabulary;
import cuongnh.project.japanesediary.vocabulary.ui.editor.vocabulary.VocabularyEditor;
import cuongnh.project.japanesediary.vocabulary.ui.editor.vocabulary.VocabularyEditorInput;
import cuongnh.project.japanesediary.vocabulary.ui.view.VocabularyListView;

public class OpenVocabularyEditor extends AbstractHandler {

	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {
		System.out.println("called");
		// Get the view
		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
		IWorkbenchPage page = window.getActivePage();
		VocabularyListView view = (VocabularyListView) page
				.findView(VocabularyListView.ID);
		// Get the selection
		ISelection selection = view.getSite().getSelectionProvider()
				.getSelection();
		if (selection != null && selection instanceof IStructuredSelection) {
			Object obj = ((IStructuredSelection) selection).getFirstElement();
			// If we had a selection lets open the editor
			if (obj != null) {
				Vocabulary vocabulary = (Vocabulary) obj;
				VocabularyEditorInput input = new VocabularyEditorInput(
						(int) vocabulary.getVocabularyId());
				try {
					IEditorPart editor = page.findEditor(input);
					if (editor != null) {
						page.activate(editor);
					}else{
						page.openEditor(input, VocabularyEditor.ID);
					}

				} catch (PartInitException e) {
					throw new RuntimeException(e);
				}
			}
		}
		return null;
	}

}
